package com.msb.desginpatterns.singleton;

/**
 * 静态内部类
 * jvm保证单例
 * 加载外部类时不会加载内部类，保证了懒加载
 * 虚拟机加载类时只会加载一次
 */
public class Mgr07 {

    /**
     * 私有无参构造方法
     */
    private Mgr07(){}

    /**
     * 内部类，jvm在加载时不会加载内部类，所以内部类会在被调用时创建对象
     */
    private static class Mgr07Holder{
        private static final Mgr07 INSTANCE = new Mgr07();
    }

    /**
     * 创建方法，返回实例
     */
    private static Mgr07 getInstance(){
        return Mgr07Holder.INSTANCE;
    }
    /**
     * 测试方法
     */
    public static void main(String[] args) {
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                System.out.println(Mgr07.getInstance().hashCode());
            }).start();
        }
    }
}
